


import bpy
import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类



class C_Node_String(基类.C_SN_基类):
	bl_dname = 'bl_node_String'
	bl_label = 'String'
	
	#m_Value = bpy.props.StringProperty()
	def init(self, context):
		super(C_Node_String, self).f_init(context)
		self.inputs.new('C_NodeSocket_f', name='Var')
		self.outputs.new('C_NodeSocket_文本', name='Str')
		
	'''def draw_buttons(self, context, layout):
		input插座 = self.inputs['Var']
		if input插座.is_linked == False:
			layout.prop(self, 'm_Value')'''
	def f_input插座Update(self, input插座, 上层Output=None):
		if input插座 :
			if input插座.name == 'Var':
				self.m_Value = str(input插座.f_getData())
		super(C_Node_String, self).f_input插座Update(input插座, 上层Output)
		
	def f_update(self, 是否向下传递=False, input插座=None):
		input插座 = self.inputs['Var']
		if input插座.is_linked :
			self.outputs['Str'].f_setData( str(input插座.f_getData()) )
		#else:
		#	self.outputs['Str'].f_setData( self.m_Value )
			
		super(C_Node_String, self).f_update(是否向下传递, input插座)

class C_NODE_MENU_String(bpy.types.Operator):
	bl_idname = 'node.global_node_string'
	bl_label = 'String'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_String', use_transform=True)
		return {'FINISHED'}












class C_Node_合并String(基类.C_SN_基类):
	bl_dname = 'bl_node_合并String'
	bl_label = '合并 String'
	
	#m_Value = bpy.props.StringProperty()
	def init(self, context):
		super(C_Node_合并String, self).f_init(context)
		self.inputs.new('C_NodeSocket_文本', name='T1')
		self.inputs.new('C_NodeSocket_文本', name='T2')
		self.outputs.new('C_NodeSocket_文本', name='Str')
		
	'''def draw_buttons(self, context, layout):
		input插座 = self.inputs['Var']
		if input插座.is_linked == False:
			layout.prop(self, 'm_Value')'''

	'''def f_input插座Update(self, input插座, 上层Output=None):
		if input插座 :
			if input插座.name == 'Var':
				self.m_Value = str(input插座.f_getData())
		super(C_Node_合并String, self).f_input插座Update(input插座, 上层Output)'''
		
	def f_update(self, 是否向下传递=False, input插座=None):
		T1 = self.inputs['T1'].f_getData()
		T2 = self.inputs['T2'].f_getData()
		
		self.outputs['Str'].f_setData( T1+T2 )
		
		super(C_Node_合并String, self).f_update(是否向下传递, input插座)

class C_NODE_MENU_合并String(bpy.types.Operator):
	bl_idname = 'node.global_node_merge_string'
	bl_label = '合并 String'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_合并String', use_transform=True)
		return {'FINISHED'}











def f_代码头置入_vector_f(self, context):
	代码头 = '# Text:初始字符串 - 参数:data 返回数据'
	self.m_Code.lines[0].body = 代码头

class C_Node_StringOperator(基类.C_SN_基类):
	bl_dname = 'bl_node_StringOperator'
	bl_label = 'String 操作'
	
	m_Code = bpy.props.PointerProperty(type=bpy.types.Text, update=f_代码头置入_vector_f)
	def init(self, context):
		super(C_Node_StringOperator, self).f_init(context)
		self.inputs.new('C_NodeSocket_文本', name='Var')
		self.outputs.new('C_NodeSocket_文本', name='Str')
		
	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_Code')
	
	def f_update(self, 是否向下传递=False, input插座=None):
		input插座 = self.inputs['Var']
		
		initStr = input插座.f_getData()
		if self.m_Code != None :
			全局变量 = {'Text':initStr, 'data':0}
			基类.f_执行代码(self, 全局变量)
			self.outputs['Str'].f_setData(全局变量['data'])
		else:
			self.outputs['Str'].f_setData(initStr)
		
		super(C_Node_StringOperator, self).f_update(是否向下传递, input插座)

class C_NODE_MENU_StringOperator(bpy.types.Operator):
	bl_idname = 'node.global_node_string_operator'
	bl_label = 'String 操作'
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_StringOperator', use_transform=True)
		return {'FINISHED'}






classes = (
	C_Node_String,
	C_NODE_MENU_String,

	C_Node_合并String,
	C_NODE_MENU_合并String,

	C_Node_StringOperator,
	C_NODE_MENU_StringOperator,

)

def register():
	for c in classes:
		bpy.utils.register_class(c)

def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)
	




